public class ThreadDemo15 {
}


class SingletonLazy{
    //要点3：这个引用指向唯一实例。这个引用先初始化为null，而不是立即创建实例
    private volatile static SingletonLazy instance = null;
    private SingletonLazy(){}
    public static SingletonLazy getInstance(){
        //要点2：第一个if，判定是否加要锁
        //      如果instance为null，就说明是首次调用，首次调用就需要考虑线程安全问题，就需要加锁。
        //      如果非null，就说明是后续的调用，就不必加锁了。（效率！！！）
        if(instance == null){
            //要点1：第二个if，判定的是否要创建对象。
            //     （很巧：要点1 和 要点2 ，两个if的条件相同 ~
            //     ~）
            synchronized (SingletonLazy.class){
                if(instance == null){
                    instance = new SingletonLazy();
                }
            }
        }

        return instance;
    }
}
